home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-08-04 | 1.0 KB | 58 lines | [TEXT/CWIE] |
- unit MyTermination;
-
- interface
-
- uses
- Types;
-
- procedure InitTermination(term:ProcPtr); { ProcPtr! Not UniversalProcPtr! }
- procedure FinishTermination;
-
- implementation
-
- uses
- Traps,MyCallProc,MyUtils,PreserveA5;
-
- var
- gTermination:UniversalProcPtr;
- gExitToShell:UniversalProcPtr;
-
- procedure CallTermination;
- var
- tmp:UniversalProcPtr;
- begin
- if gTermination<>nil then begin
- tmp:=gTermination;
- gTermination:=nil;
- CallPascal0(tmp);
- end;
- end;
-
- procedure ExitToShellPatch;
- var
- olda5:Ptr;
- lExitToShell:UniversalProcPtr;
- begin
- olda5:=SetPreservedA5;
- CallTermination;
- lExitToShell:=gExitToShell;
- RestoreA5(olda5);
- CallPascal0(lExitToShell);
- end;
-
- procedure InitTermination(term:ProcPtr);
- begin
- if term<>nil then begin
- gTermination:=NewProc(term,uppPascal0ProcInfo);
- gExitToShell:=MyGetTrapAddress(_ExitToShell);
- MySetTrapAddress(NewProc(@ExitToShellPatch,uppPascal0ProcInfo),_ExitToShell);
- end;
- end;
-
- procedure FinishTermination;
- begin
- CallTermination;
- end;
-
- end.
-